Jump アカウント構成で外部 ID プロバイダとして Entra ID を利用する

Jump アカウント構成で外部 ID プロバイダとして Entra ID を利用する

Clock Icon2024.02.12

Jump アカウント構成において、外部の ID プロバイダとして Microsoft Entra ID を利用する構成を試してみました。

構成イメージ図は下記の通りです。Jump アカウントに IAM ユーザーを作成するのではなく、IAM ID プロバイダを作成して Entra ID と SAML で連携します。ID プロバイダには他のアカウントにスイッチロールできる権限の IAM ロールを関連付けます。スイッチロール先アカウントの IAM ロールでは Jump アカウントの IAM ロールを信頼します。

Jump アカウントと Entra ID の連携設定

Entra ID (旧 Azure AD) と AWS アカウントを連携する手順は次の Microsoft ドキュメントに記載されています。

チュートリアル: Microsoft Entra SSO と AWS Single-Account Access の統合 - Microsoft Entra ID | Microsoft Learn


手順は下記ブログでも紹介されているため、今回は下記ブログの手順で Jump アカウントと Entra ID の連携設定を実施します。

この設定の際に、Jump アカウントで作成した ID プロバイダに関連付ける IAM ロール名はdemo-assume-roleとして、他の AWS アカウントにスイッチロールできるように下記のポリシーを設定した IAM ポリシーをアタッチしました。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "*"
    }
}

スイッチロール先アカウントの設定

スイッチロール先アカウントにおいて、Jump アカウントの IAM ロールdemo-assume-roleを信頼する IAM ロールを 2 つ作成します。作成・更新作業が無いときは ReadOnlyAccess を利用し、作成・更新作業が必要なときは AdministratorAccess を利用することを想定しています。

項目 設定内容 設定内容
IAM ロール名 administrator-access-role read-only-access-role
許可 - AWS 管理ポリシー AdministratorAccess ReadOnlyAccess
許可 - カスタマー管理ポリシー なし なし
許可 - インラインポリシー なし なし
信頼ポリシー 下記参照 下記参照

信頼ポリシーは下記としました。Jump アカウントの IAM ロールを信頼します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/demo-assume-role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

動作確認

Entra ID の「マイ アプリ」ページから Jump アカウントにアクセスします。この際に、Jump アカウントの IAM ID プロバイダに複数の IAM ロールを関連付けしている場合は、利用するロールを選択する画面が表示されますが、今回は関連付けしているロールは 1 つのためロール選択画面は表示されずに Jump アカウントに遷移します。

Jump アカウントにアクセス後は、スイッチロールの設定をします。

administrator-access-roleread-only-access-roleの両方のロールでマネジメントコンソールにアクセスできました。画像右上にスイッチロールの設定で指定した表示名が表示されています。

複数のユーザーと権限の管理

今回のブログではシンプルな例で試しまたが、実際の環境は複数のユーザーやプロジェクトがあります。その場合は主に次の 2 通りの設定ができそうです(他にもあるかもしれません)。

1 つ目は、Jump アカウントに複数のロールを用意して、最終的にアクセスするアカウントにおいて Jump アカウントのロール単位で信頼するパターンです。

2 つ目は、Entra ID からは Jump アカウントの AsuumeRole 用ロールのみにアクセスできるようにして、最終的にアクセスするアカウントの信頼ポリシーで Entra ID ユーザーの一致も条件に指定するパターンです。

Entra ID にユーザーが増えた場合に最終的にアクセスするアカウトでユーザーを追加する手間が発生することになります。一方で、Entra ID 側の設定変更の手間を少なくできる可能性があるため、Entra ID と AWS の管理部署が異なり、Entra ID 側を簡単に設定変更できない場合などには便利かもしれません。

2 つ目のパターンを実現する、最終的にアクセスするアカウント(上図のスイッチロール先アカウント)における IAM ロールの信頼ポリシー例です。Condition でユーザー名の一致を条件としています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/demo-assume-role"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:userid": "*:user-name@example.onmicrosoft.com"
                }
            }
        }
    ]
}

次のブログでも紹介されている方法となります。

両方のパターンにはそれぞれメリットとデメリットがあるため、状況に応じて検討する必要がありそうです。

さいごに

Jump アカウント構成において、外部の ID プロバイダーとして Microsoft Entra ID を利用した構成を試してみました。外部 ID プロバイダーを利用することで AWS 側の IAM ユーザーを作成せずに既存の ID 基盤のユーザーで AWS を利用できることを確認できました。

以上、このブログがどなたかのご参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.